
            <!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <title>【Prometheus】Node Exporter常用查询PromQL 语句大总结</title>
            </head>
            <body>
            <a href="https://andyoung.blog.csdn.net">原作者博客</a>
            <div id="content_views" class="markdown_views prism-atom-one-light">
                    <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
                        <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
                    </svg>
                    <h2><a id="cpu_0"></a>计算集群cpu平均使用率</h2> 
<p>通过计算cpu空闲使用率 用1-空闲率 则为cpu使用率</p> 
<ul><li> <p><code>node_cpu_seconds</code> 表示机器在非重启情况下开机到现在所使用的时间（s）</p> </li><li> <p>由于cpu资源会不断的被机器利用，其中对应了很多模式，包括内核进程、用户进程、io等待、中断等使用模式</p> </li><li> <p>可以通过查询node_cpu_seconds 指标来看各种对应的模式</p> </li><li> <p>cpu空闲对应的模式：model=“idle”：空闲的cpu时间</p> </li></ul> 
<h3><a id="cpu_12"></a>查询cpu空闲使用率：</h3> 
<ul><li>使用irate计算时间窗口 [5m] 内 cpu空闲（model=“idle”）的增长率<br> irate: 内置函数 求时间窗口内指标的增长率 ，它不同于rate的是，它不会造成长尾问题，敏感性更高。</li></ul> 
<p><code>irate(node_cpu_seconds_total{mode="idle"}[5m])</code></p> 
<h4><a id="taginstance_avgcpu_19"></a>输出tag:instance 并使用avg求每个机器cpu空闲平均值</h4> 
<p>avg:聚合函数 求平均值</p> 
<p><code>avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])</code></p> 
<h4><a id="cpu_25"></a>查询cpu平均使用率</h4> 
<p>通过1-cpu空闲率得出每个机器的平均使用率</p> 
<p><code>1- (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])))</code></p> 
<p>转换为 100%</p> 
<pre><code>100 - (avg by (instance) (irate(node_cpu{instance="xxx", mode="idle"}[5m])) * 100)
</code></pre> 
<p>查询集群所有机器的cpu平均使用率<br> <code>avg( 1 - (avg(irate(node_cpu_seconds_total{mode="idle"}[1m])))) </code></p> 
<h4><a id="CPUmode_42"></a>CPU各mode占比率</h4> 
<pre><code>avg by (instance, mode) (irate(node_cpu{instance="xxx"}[5m])) * 100
</code></pre> 
<h4><a id="_48"></a>机器平均负载</h4> 
<pre><code>node_load1{instance="xxx"} // 1分钟负载
node_load5{instance="xxx"} // 5分钟负载
node_load15{instance="xxx"} // 15分钟负载
</code></pre> 
<h4><a id="_56"></a>内存使用率</h4> 
<pre><code>100-(node_memory_MemFree_bytes{instance="192.168.119.69:9796"}+node_memory_Cached_bytes{instance="192.168.119.69:9796"}+node_memory_Buffers_bytes{instance="192.168.119.69:9796"})/node_memory_MemTotal_bytes{instance="192.168.119.69:9796"}*100
</code></pre> 
<pre><code>(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)/node_memory_MemTotal_bytes * 100
</code></pre> 
<h4><a id="_68"></a>磁盘使用率</h4> 
<pre><code>100 - node_filesystem_free_bytes{mountpoint = "/",instance="xxx",fstype!~"rootfs|selinuxfs|autofs|rpc_pipefs|tmpfs|udev|none|devpts|sysfs|debugfs|fuse.*"} /
           node_filesystem_size_bytes{mountpoint = "/",instance="xxx",fstype!~"rootfs|selinuxfs|autofs|rpc_pipefs|tmpfs|udev|none|devpts|sysfs|debugfs|fuse.*"} * 100
</code></pre> 
<p>或者你也可以直接使用 {fstype=“xxx”} 来指定想查看的磁盘信息</p> 
<h4><a id="IO_77"></a>网络IO</h4> 
<pre><code>// 上行带宽
sum by (instance) (irate(node_network_receive_bytes_total{instance="xxx",device!~"bond.*?|lo"}[5m])/128)

// 下行带宽
sum by (instance) (irate(node_network_transmit_bytes_total{instance="xxx",device!~"bond.*?|lo"}[5m])/128)
</code></pre> 
<h4><a id="_87"></a>网卡出入包</h4> 
<pre><code>// 入包量
sum by (instance) (rate(node_network_receive_bytes_total{instance="xxx",device!="lo"}[5m]))

// 出包量
sum by (instance) (rate(node_network_transmit_bytes_total{instance="xxx",device!="lo"}[5m]))
</code></pre> 
<h4><a id="IOPS_97"></a>IOPS读写</h4> 
<pre><code>写
irate(node_disk_writes_completed_total{instance=~"^192.168.119.68:9796",device=~"[a-z]*[a-z]"}[5m])
   
   
    //IOPS读  查询条件
       String IOPSRead = "sum without(device)  (node_disk_reads_completed_total{instance=~\"^" + instance + "\"})";
node_disk_reads_completed_total/node_disk_read_time_seconds_total

读
irate(node_disk_reads_completed_total{instance=~"^192.168.119.68:9796",device=~"[a-z]*[a-z]"}[5m])
</code></pre> 
<h4><a id="api_112"></a>每秒api请求数</h4> 
<pre><code>sum by(component) (irate(apiserver_request_total[5m]))
</code></pre> 
<h4><a id="api_118"></a>api平均延时</h4> 
<pre><code>avg by(component)((sum by(component)(apiserver_request_duration_seconds_sum))/(sum by(component)(apiserver_request_duration_seconds_count)))
</code></pre> 
<h4><a id="_124"></a>调度器调度次数</h4> 
<pre><code>sum  (scheduler_schedule_attempts_total)
</code></pre> 
<h4><a id="pod_130"></a>调度失败的pod</h4> 
<pre><code>sum (scheduler_schedule_attempts_total{result!="scheduled"})
</code></pre> 
<h4><a id="CPU_136"></a>集群CPU使用率</h4> 
<pre><code>1- (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])))
</code></pre> 
<h4><a id="_142"></a>集群内存使用率</h4> 
<pre><code>100 * (1 - sum(node_memory_MemAvailable_bytes) / sum(node_memory_MemTotal_bytes))
</code></pre> 
<h4><a id="_148"></a>集群磁盘使用率</h4> 
<pre><code>(sum(node_filesystem_size_bytes{device!~"rootfs|HarddiskVolume.+",node=~"^.*$"})
    - sum(node_filesystem_free_bytes{device!~"rootfs|HarddiskVolume.+",node=~"^.*$"})
   ) / sum(node_filesystem_size_bytes{device!~"rootfs|HarddiskVolume.+",node=~"^.*$"}) * 100 
</code></pre> 
<h4><a id="cpu_156"></a>集群总cpu</h4> 
<pre><code>sum (machine_cpu_cores{node=~"^.*$"})
</code></pre> 
<h4><a id="cpu_162"></a>集群已经使用的cpu</h4> 
<pre><code>(1 - (avg(irate(node_cpu_seconds_total{mode="idle",node=~"^.*$"}[5m])))) * sum(machine_cpu_cores{node=~"^.*$"})
</code></pre> 
<h4><a id="_168"></a>集群总内存</h4> 
<pre><code>sum (machine_memory_bytes{node=~"^.*$"})
</code></pre> 
<h4><a id="_174"></a>集群已使用内存</h4> 
<pre><code>sum(node_memory_MemTotal_bytes{device!~"rootfs|HarddiskVolume.+",node =~"^.*$"}) - sum(node_memory_MemAvailable_bytes{device!~"rootfs|HarddiskVolume.+",node =~"^.*$"})
</code></pre> 
<h4><a id="_180"></a>集群总磁盘</h4> 
<pre><code>sum(node_filesystem_size_bytes{device!~"rootfs|HarddiskVolume.+",node=~"^.*$"})
</code></pre> 
<h4><a id="_186"></a>集群已使用磁盘</h4> 
<pre><code>sum(node_filesystem_size_bytes{device!~"rootfs|HarddiskVolume.+",node=~"^.*$"})
    - sum(node_filesystem_free_bytes{device!~"rootfs|HarddiskVolume.+",node=~"^.*$"})
</code></pre> 
<h4><a id="pod_193"></a>集群总pod</h4> 
<pre><code>sum (kube_node_status_capacity_pods)
   
不用---&gt;  sum(kube_pod_status_phase{namespace=~".*", phase=~".*"})
</code></pre> 
<h4><a id="pod_201"></a>集群运行pod</h4> 
<pre><code>sum(kubelet_running_pod_count)
   
sum(kube_pod_status_phase{namespace=~".*", phase="Running"})
</code></pre>
                </div>
            </body>
            </html>
            